package com.easylinkin.linkappapi.lobar.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.easylinkin.linkappapi.common.model.RequestModel;
import com.easylinkin.linkappapi.device.entity.Device;
import com.easylinkin.linkappapi.lobar.dto.GateQueryDTO;
import com.easylinkin.linkappapi.lobar.dto.UserProjectDTO;
import com.easylinkin.linkappapi.lobar.dto.excel.ExcelResultDTO;
import com.easylinkin.linkappapi.lobar.entity.Gate;
import com.easylinkin.linkappapi.lobar.entity.UserProject;
import com.easylinkin.linkappapi.lobar.vo.GateRecordVo;
import com.easylinkin.linkappapi.openapi.dto.DatapushDTO;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 闸机表 服务类
 * </p>
 *
 * @author TongJie
 * @since 2022-04-13
 */
public interface GateService extends IService<Gate> {

  IPage<Gate> queryListByPage(RequestModel<Gate> requestModel);

  /**
   * 增加
   * @param gate
   */
  void insert(Gate gate);

  /**
   * 根据id编辑
   * @param gate
   */
  void updateOne(Gate gate);

  IPage<UserProjectDTO> queryUserByPage(RequestModel<UserProject> requestModel);

  /**
   * @Description: 增加闸机授权人员
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  void insertUser(Gate gate);

  /**
   * @Description: 解除绑定
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  void delUser(Set<String> ids);

  /**
   * @Description: 删除闸机（包含批量删除）
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  void delBatch(Set<String> ids);

  /**
   * 闸机流水处理
   * @param datapushDTO
   */
  void datapushHandler(DatapushDTO datapushDTO);

  /**
   * 同步授权人员
   * @param id
   */
  ExcelResultDTO upUserToGate(String id);

  /**
   * 查询可选择的下拉闸机设备选项
   * @param code  编辑时带上自身数据设备code
   */
  List<Device> getDeviceList(String code);

  /**
   * @Description: 删除闸机关联人员
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  void deleteLink(Set<Integer> ids);

  IPage<GateRecordVo> selectGateRecords(RequestModel<GateQueryDTO> requestModel);

}
